/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Controlador.Service.Ventas;

import Controlador.Bean.Log.Log;
import Controlador.Bean.Ventas.Pedido;
import Controlador.Bean.Ventas.PedidoBusqueda;
import Data.config.SessionFac;
import gui.General.Main;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.apache.ibatis.session.SqlSession;

/**
 *
 * @author Luis Enrique
 */
public class ServicioPedido {
        
    java.text.SimpleDateFormat sdf=new java.text.SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
    Date fecha= new Date();
    String f=sdf.format(fecha);
    
    private ServicioPedido() {};
    
    static private ServicioPedido servicioPedido=null; 
		   
    public static ServicioPedido getInstance(){    
        if(servicioPedido==null) servicioPedido= new ServicioPedido();
        return servicioPedido;
    }   
      
    //INICIO PEDIDO
    public String getCodPedido(){
        String codigo;
        try(SqlSession sqlsesion=SessionFac.SessionFactory().openSession()){
            codigo = sqlsesion.selectOne("Data.Ventas.ServicioPedido.getCodPedido");			
            sqlsesion.close();
        }
        if(codigo!=null){
            int cod= Integer.parseInt(codigo.substring(3))+1;
            String defecto= "000000";
            String temp= defecto.substring(0, defecto.length()-String.valueOf(cod).length()).concat(String.valueOf(cod));
            return codigo.substring(0,3).concat(temp);
        }
        else
             return ("PED000001");
    }
    
    public int getCorrelativoPedido(){
        Integer correlativo;
        try(SqlSession sqlsesion=SessionFac.SessionFactory().openSession()){
            correlativo = (Integer)sqlsesion.selectOne("Data.Ventas.ServicioPedido.getCorrelativo");			
            sqlsesion.close();
        }
        if(correlativo!=null)
            return correlativo+1;
        else
            return (1);
    }
    
    public synchronized void registrarPedido(Pedido c){
        try(SqlSession sqlsesion=SessionFac.SessionFactory().openSession()){
            sqlsesion.insert("Data.Ventas.ServicioPedido.insertPedido",c);
            sqlsesion.commit();
            sqlsesion.close();
            Log.setInstancia(Main.usu.getIdEmpleadoAdm(),"VNTPEDID","Registrar Pedido",f);
        }
    }
    
    public ArrayList<PedidoBusqueda> seleccionarAllPedidos(){
        ArrayList<PedidoBusqueda> pedidos;
        try(SqlSession sqlsesion=SessionFac.SessionFactory().openSession()){
            List<PedidoBusqueda> temp = (List)sqlsesion.selectList("Data.Ventas.ServicioPedido.getAllPedidos");			
            pedidos = new ArrayList(temp);
            sqlsesion.close();
            //Log.setInstancia(Main.usu.getIdEmpleadoAdm(),"VNTPEDID","Seleccionar Pedidos",f);
        }
        return pedidos;
    }   
    
    public ArrayList<PedidoBusqueda> seleccionarPedidos (PedidoBusqueda pedidoBusqueda){
        ArrayList<PedidoBusqueda> pedidos;
        try(SqlSession sqlsesion=SessionFac.SessionFactory().openSession()){
            List<PedidoBusqueda> temp = (List)sqlsesion.selectList("Data.Ventas.ServicioPedido.getPedidos",pedidoBusqueda);			
            pedidos = new ArrayList(temp);
            sqlsesion.close();
            Log.setInstancia(Main.usu.getIdEmpleadoAdm(),"VNTPEDID","Seleccionar Pedidos",f);
        }
        return pedidos;
    }
    
    public void eliminarPedido (String codigo){
        try(SqlSession sqlsesion=SessionFac.SessionFactory().openSession()){
            sqlsesion.update("Data.Ventas.ServicioPedido.deletePedido",codigo);
            sqlsesion.commit();
            sqlsesion.close();
            Log.setInstancia(Main.usu.getIdEmpleadoAdm(),"VNTPEDID","Anular Pedido",f);
        }
    }
    
    public void actualizarPedidoFac (String codigo){
        try(SqlSession sqlsesion=SessionFac.SessionFactory().openSession()){
            sqlsesion.update("Data.Ventas.ServicioPedido.actualizarPedidoFac",codigo);
            sqlsesion.commit();
            sqlsesion.close();
        }
    }
    //FIN PEDIDO
}